Exemplo de Classe Utilitária: Validador
Exemplo de classe de validação:
public class Validador {
// Valida CPF
public static boolean validarCPF(String cpf) {
if (cpf == null) return false;
// Remove caracteres que não são números
StringBuilder sb = new StringBuilder();
for (char c : cpf.toCharArray()) {
if (c >= '0' && c <= '9') {
sb.append(c);
}
}
cpf = sb.toString();
if (cpf.length() != 11 || allDigitsSame(cpf)) {
return false;
}
// Calcula primeiro dígito verificador
int soma1 = 0;
for (int i = 0; i < 9; i++) {
soma1 += (cpf.charAt(i) - '0') * (10 - i);
}
int digito1 = (soma1 * 10) % 11;
if (digito1 == 10) digito1 = 0;
// Calcula segundo dígito verificador
int soma2 = 0;
for (int i = 0; i < 10; i++) {
soma2 += (cpf.charAt(i) - '0') * (11 - i);
}
int digito2 = (soma2 * 10) % 11;
if (digito2 == 10) digito2 = 0;
return digito1 == (cpf.charAt(9) - '0') &&
digito2 == (cpf.charAt(10) - '0');
}
// Valida CNPJ
public static boolean validarCNPJ(String cnpj) {
if (cnpj == null) return false;
// Remove caracteres que não são números
StringBuilder sb = new StringBuilder();
for (char c : cnpj.toCharArray()) {
if (c >= '0' && c <= '9') {
sb.append(c);
}
}
cnpj = sb.toString();
if (cnpj.length() != 14 || allDigitsSame(cnpj)) {
return false;
}
int[] pesos1 = {5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2};
int[] pesos2 = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2};
int soma1 = 0;
for (int i = 0; i < 12; i++) {
soma1 += (cnpj.charAt(i) - '0') * pesos1[i];
}
int digito1 = soma1 % 11;
digito1 = (digito1 < 2) ? 0 : 11 - digito1;
int soma2 = 0;
for (int i = 0; i < 13; i++) {
soma2 += (cnpj.charAt(i) - '0') * pesos2[i];
}
int digito2 = soma2 % 11;
digito2 = (digito2 < 2) ? 0 : 11 - digito2;
return digito1 == (cnpj.charAt(12) - '0') &&
digito2 == (cnpj.charAt(13) - '0');
}
// Valida e-mail
public static boolean validarEmail(String email) {
if (email == null) return false;
int atIndex = email.indexOf('@');
if (atIndex <= 0 || atIndex == email.length() - 1) {
return false; // precisa ter '@' no meio
}
String local = email.substring(0, atIndex);
String dominio = email.substring(atIndex + 1);
if (local.isEmpty() || dominio.isEmpty()) {
return false;
}
// Verifica se domínio contém pelo menos um ponto
if (!dominio.contains(".")) {
return false;
}
// Verifica caracteres válidos (simplificado: letras, números, '.', '-', '_')
for (char c : email.toCharArray()) {
if (!isValidEmailChar(c)) {
return false;
}
}
return true;
}
// Função auxiliar: todos os dígitos iguais
private static boolean allDigitsSame(String s) {
char first = s.charAt(0);
for (char c : s.toCharArray()) {
if (c != first) return false;
}
return true;
}
// Função auxiliar: caracteres válidos para email
private static boolean isValidEmailChar(char c) {
return (c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c >= '0' && c <= '9') ||
c == '.' || c == '-' || c == '_' || c == '@';
}
public static boolean validarSenha(
String senha,
int minMinusculas,
int minMaiusculas,
int minDigitos,
int minEspeciais
) {
if (senha == null) {
throw new IllegalArgumentException("Senha não pode ser nula.");
}
int minusculas = 0;
int maiusculas = 0;
int digitos = 0;
int especiais = 0;
for (char c : senha.toCharArray()) {
if (c >= 'a' && c <= 'z') {
minusculas++;
} else if (c >= 'A' && c <= 'Z') {
maiusculas++;
} else if (c >= '0' && c <= '9') {
digitos++;
} else {
especiais++;
}
}
if (minusculas < minMinusculas) {
throw new IllegalArgumentException("Senha deve conter pelo menos " + minMinusculas + " letra(s) minúscula(s).");
}
if (maiusculas < minMaiusculas) {
throw new IllegalArgumentException("Senha deve conter pelo menos " + minMaiusculas + " letra(s) maiúscula(s).");
}
if (digitos < minDigitos) {
throw new IllegalArgumentException("Senha deve conter pelo menos " + minDigitos + " dígito(s).");
}
if (especiais < minEspeciais) {
throw new IllegalArgumentException("Senha deve conter pelo menos " + minEspeciais + " caractere(s) especial(is).");
}
// Se passou em todos os critérios, senha é válida
return true;
}
}
Exemplo de uso dos métodos.
public class Main {
public static void main(String[] args) {
System.out.println(Validador.validarCPF("123.456.789-09")); // false
System.out.println(Validador.validarCNPJ("12.345.678/0001-95")); // false
System.out.println(Validador.validarEmail("teste@dominio.com")); // true
System.out.println(Validador.validarEmail("teste@dominio")); // false
try {
System.out.println(ValidadorSenha.validarSenha("s3gr3d0", 1, 1, 1, 0); // Exception
System.out.println(ValidadorSenha.validarSenha("S3gr3d0", 1, 1, 1, 0); // true
} catch (ValidacaoSenhaException e) {
System.out.println("Senha inválida: " + e.getMessage());
}
}
}